package com.itextpdf.text.pdf; import com.itextpdf.text.*; import com.itextpdf.text.xml.xmp.PdfAXmpWriter; import com.itextpdf.xmp.XMPException; import junit.framework.Assert; import org.junit.Test; import java.io.*; public class PdfA3CheckerTest { private static final String outputDir = "./target/test/PdfA3/"; static { new File(outputDir).mkdirs(); } @Test public void fileSpecCheckTest1() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "fileSpecCheckTest1.pdf"), PdfAConformanceLevel.PDF_A_3B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); ByteArrayOutputStream txt = new ByteArrayOutputStream(); PrintStream out = new PrintStream(txt); out.print("<foo><foo2>Hello world</foo2></foo>"); out.close(); writer.addFileAttachment("foo file", txt.toByteArray(), "foo.xml", "foo.xml", "application/xml", AFRelationshipValue.Source); document.close(); } @Test public void fileSpecCheckTest2() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "fileSpecCheckTest2.pdf"), PdfAConformanceLevel.PDF_A_3B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); ByteArrayOutputStream txt = new ByteArrayOutputStream(); PrintStream out = new PrintStream(txt); out.print("<foo><foo2>Hello world</foo2></foo>"); out.close(); PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(writer, null, "foo.xml", txt.toByteArray()); fs.put(PdfName.AFRELATIONSHIP, AFRelationshipValue.Unspecified); writer.addFileAttachment(fs); document.close(); } @Test public void fileSpecCheckTest3() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "fileSpecCheckTest3.pdf"), PdfAConformanceLevel.PDF_A_3B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); byte[] somePdf = new byte[25]; writer.addFileAttachment("some pdf file", somePdf, "foo.pdf", "foo.pdf", PdfAWriter.MimeTypePdf, AFRelationshipValue.Data); document.close(); } @Test public void fileSpecCheckTest4() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "fileSpecCheckTest4.pdf"), PdfAConformanceLevel.PDF_A_3B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); byte[] somePdf = new byte[25]; writer.addPdfAttachment("some pdf file", somePdf, "foo.pdf", "foo.pdf"); document.close(); } @Test public void fileSpecCheckTest5() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "fileSpecCheckTest5.pdf"), PdfAConformanceLevel.PDF_A_3B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); ByteArrayOutputStream txt = new ByteArrayOutputStream(); PrintStream out = new PrintStream(txt); out.print("<foo><foo2>Hello world</foo2></foo>"); out.close(); boolean exceptionThrown = false; try { PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(writer, null, "foo.xml", txt.toByteArray()); writer.addFileAttachment(fs); } catch (PdfAConformanceException e) { if (e.getObject() != null && e.getLocalizedMessage().equals("The file specification dictionary for an embedded file shall contain correct AFRelationship key.")) { exceptionThrown = true; } } if (!exceptionThrown) Assert.fail("PdfAConformanceException with correct message should be thrown."); } @Test public void fileSpecCheckTest6() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "fileSpecCheckTest2.pdf"), PdfAConformanceLevel.PDF_A_3B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfDictionary params = new PdfDictionary(); params.put(PdfName.MODDATE, new PdfDate()); PdfFileSpecification fileSpec = PdfFileSpecification.fileEmbedded( writer, "./src/test/resources/com/itextpdf/text/pdf/foo.xml", "foo.xml", null, false, "text/xml", params); fileSpec.put(PdfName.AFRELATIONSHIP, AFRelationshipValue.Data); writer.addFileAttachment(fileSpec); document.close(); } @Test public void fileSpecCheckTest7() throws DocumentException, IOException { FileInputStream inPdf = new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/fileSpec.pdf"); ByteArrayOutputStream xml = new ByteArrayOutputStream(); PrintStream out = new PrintStream(xml); out.print("<foo><foo2>Hello world</foo2></foo>"); out.close(); ByteArrayOutputStream output = new ByteArrayOutputStream(); PdfReader reader = new PdfReader(inPdf); PdfAStamper stamper = new PdfAStamper(reader, output, PdfAConformanceLevel.PDF_A_3B); stamper.createXmpMetadata(); PdfDictionary embeddedFileParams = new PdfDictionary(); embeddedFileParams.put(PdfName.MODDATE, new PdfDate()); PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(stamper.getWriter(), "foo", "foo", xml.toByteArray() , "text/xml", embeddedFileParams, 0); fs.put(PdfName.AFRELATIONSHIP, AFRelationshipValue.Source); stamper.addFileAttachment("description", fs); stamper.close(); reader.close(); } public void pdfObjectCheckTest() throws DocumentException, IOException { PdfA1CheckerTest.pdfObjectCheck(outputDir + "pdfObjectCheckTest.pdf", PdfAConformanceLevel.PDF_A_3B, false); } @Test public void barcodesTest1() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document,new FileOutputStream(outputDir + "barcodesTest1.pdf"), PdfAConformanceLevel.PDF_A_3A); writer.setTagged(); document.open(); writer.setViewerPreferences(PdfWriter.DisplayDocTitle); document.addTitle("Some title"); document.addLanguage("en-us"); writer.createXmpMetadata(); document.newPage(); // Set output intent. PDF/A requirement. ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); // All fonts shall be embedded. PDF/A requirement. Font normal9 = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 9); Font normal8 = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 8); BaseColor color = new BaseColor(111,211,11); normal8.setColor(color); PdfContentByte cb = writer.getDirectContent(); String code = "119716-500023718"; Barcode barcode = new Barcode39(); barcode.setCode(code); barcode.setStartStopText(false); barcode.setFont(normal9.getBaseFont()); barcode.setExtended(true); Image image = barcode.createImageWithBarcode(cb, color, color); image.setAlt("Bla Bla"); document.add(image); document.close(); } @Test public void zugferdInvoiceTest() throws DocumentException, IOException, XMPException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "zugferdInvoiceTest.pdf"), PdfAConformanceLevel.ZUGFeRD); writer.createXmpMetadata(); writer.getXmpWriter().setProperty(PdfAXmpWriter.zugferdSchemaNS, PdfAXmpWriter.zugferdDocumentFileName, "invoice.xml"); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); PdfDictionary parameters = new PdfDictionary(); parameters.put(PdfName.MODDATE, new PdfDate()); PdfFileSpecification fileSpec = PdfFileSpecification.fileEmbedded( writer, "./src/test/resources/com/itextpdf/text/pdf/invoice.xml", "invoice.xml", null, "application/xml", parameters, 0); fileSpec.put(PdfName.AFRELATIONSHIP, AFRelationshipValue.Alternative); writer.addFileAttachment("invoice.xml", fileSpec); PdfArray array = new PdfArray(); array.add(fileSpec.getReference()); writer.getExtraCatalog().put(new PdfName("AF"), array); document.close(); } }